package main

import "fmt"

type Animal interface {
	shout()
	eat()
}

type Creature interface {
	live()
	cry()
}

/*
一个结构体可以同时实现多个接口
类似于java中一个类继承了多个接口
只有当这个结构体覆盖了这个接口的所有方法，才叫做继承了这个接口
*/

type XiaoYuTou struct {
}

func (x *XiaoYuTou) shout() {
	//TODO implement me
	fmt.Println("XiaoYuTou shout")
}

func (x *XiaoYuTou) eat() {
	//TODO implement me
	fmt.Println("XiaoYuTou eat")
}

func (x *XiaoYuTou) live() {
	//TODO implement me
	fmt.Println("XiaoYuTou live")
}

func (x *XiaoYuTou) cry() {
	//TODO implement me
	fmt.Println("XiaoYuTou cry")
}

func main() {
	xyt := XiaoYuTou{}
	xyt.shout()
	xyt.eat()
	xyt.live()
	xyt.cry()

	fmt.Println()
	var animal Animal
	animal = &xyt // 类似于 List<Integer> list = new ArrayList<>()
	//此时animal只能调用自己接口内部的方法
	animal.shout()
	animal.eat()

	fmt.Println()
	var creature Creature
	creature = &xyt
	//creature只能调用自己接口内部的方法
	creature.live()
	creature.cry()

}
